using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class RendimientoDesarrollador : System.Web.UI.Page
{
    ControladoraEmpleados controlEmpleados = new ControladoraEmpleados();
    ControladoraConsultas controlConsultas = new ControladoraConsultas();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            this.cargarCbDesarrolladores();
        }
    }
    protected void cbDesarrollador_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataTable lista = new DataTable();
        DataTable solicitudes = this.controlConsultas.solicitarSolicitudesPorDesarrollador(int.Parse(this.cbDesarrollador.SelectedValue));
        lista = solicitudes;
        Session["listaSolicitudes"] = lista;
        this.gvSolicitudes.DataSource = null;
        this.gvSolicitudes.DataSource = lista;
        this.gvSolicitudes.DataBind();
        this.rblCategoriasSolicitud.Enabled = true;
        this.tbCantSolicitudes.Text = lista.Rows.Count.ToString();
        this.tbNumSolicitudes.Text = lista.Rows.Count.ToString();
    }

    private void cargarCbDesarrolladores()
    {
        DataTable desarrolladores = this.controlEmpleados.solicitarDesarrolladores();
        DataTableReader lector = desarrolladores.CreateDataReader();
        while (lector.Read())
        {
            ListItem nuevo = new ListItem(lector.GetValue(1).ToString(), lector.GetValue(0).ToString());
            this.cbDesarrollador.Items.Add(nuevo);
        }
    }
    protected void rblCategoriasSolicitud_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataTable resultado = new DataTable();
        DataTable listaTemporal = new DataTable();
        DataRow[] filas;
        switch(this.rblCategoriasSolicitud.SelectedIndex)
        {
            case 0:
                resultado = (DataTable)Session["listaSolicitudes"];
                break;

            case 1:
                resultado = ((DataTable)Session["listaSolicitudes"]).Clone();
                filas= ((DataTable)Session["listaSolicitudes"]).Select("Estado = 'aprobadaEvaluacion'");
                for (int i = 0; i < filas.Length; ++i)
                {
                    resultado.ImportRow(filas[i]);
                }
                break;

            case 2:
                resultado = ((DataTable)Session["listaSolicitudes"]).Clone();
                filas = ((DataTable)Session["listaSolicitudes"]).Select("Estado = 'Anulada'");
                for (int i = 0; i < filas.Length; ++i)
                {
                    resultado.ImportRow(filas[i]);
                }
                break;

            default:
                break;
        }
        this.gvSolicitudes.DataSource = null;
        this.gvSolicitudes.DataSource = resultado;
        this.gvSolicitudes.DataBind();
        this.tbCantSolicitudes.Text = this.gvSolicitudes.Rows.Count.ToString();
        this.gvECSs.DataSource = null;
        this.gvECSs.DataBind();
        this.tbCantECSs.Text = "";
    }

    protected void gvSolicitudes_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.graficoDuraciones.CurveList.Clear();
        DataTable lista = new DataTable();
        TimeSpan diferencia = new TimeSpan();
        DataTable versiones = this.controlConsultas.solicitarHistorialPorSolicitud(int.Parse(this.gvSolicitudes.SelectedRow.Cells[0].Text));
        if(versiones != null){
            versiones.Columns.Add("TiempoDesarrollo");
            DataTableReader lector = versiones.CreateDataReader();
            int contador = 0;
            for (int j = 0; j < versiones.Columns.Count; ++j)
            {
                versiones.Columns[j].ReadOnly = false;
            }
            while(lector.Read())
            {
                DateTime fechaCreacion = DateTime.Parse(lector.GetValue(2).ToString());
                DateTime fechaUltMod = DateTime.Parse(lector.GetValue(3).ToString());
                diferencia = fechaUltMod.Subtract(fechaCreacion);
                if(contador < versiones.Rows.Count)
                {
                    Object[] myArray = versiones.Rows[contador].ItemArray;
                    myArray[4] = diferencia.Days;
                    versiones.Rows[contador].ItemArray = myArray;
                    ZedGraph.Web.ZedGraphWebBarItem barra = new ZedGraph.Web.ZedGraphWebBarItem();
                    barra.Label = myArray[1].ToString();
                    this.graficoDuraciones.CurveList.Add(barra);
                    ZedGraph.Web.ZedGraphWebPointPair punto = new ZedGraph.Web.ZedGraphWebPointPair();
                    punto.X = contador + 1;
                    ((ZedGraph.Web.ZedGraphWebBarItem)graficoDuraciones.CurveList[contador]).Fill.Color = System.Drawing.Color.FromArgb(contador * 30, 255 - contador * 30, contador * 30);
                    graficoDuraciones.CurveList[contador].Points.Add(punto);
                    graficoDuraciones.CurveList[contador].Points[0].Y = Convert.ToDouble(int.Parse(myArray[4].ToString()));
                }
                ++contador;
            }
        }
        lista = versiones;
        this.gvECSs.DataSource = null;
        this.gvECSs.DataSource = lista;
        this.gvECSs.DataBind();        
        
        this.tbCantECSs.Text = this.gvECSs.Rows.Count.ToString();
    }
    protected void ZedGraphWeb1_RenderGraph(ZedGraph.Web.ZedGraphWeb webObject, System.Drawing.Graphics g, ZedGraph.MasterPane pane)
    {
        pane.AxisChange(g);
    }
}
